package com.quanyan.place.client;

import com.quanyan.api.APIResponse;
import com.quanyan.common.Plugin.PageObj;
import com.quanyan.place.entity.PlaceDubboProvider;
import com.quanyan.place.entity.PlaceUnitDubboProvider;
import com.quanyan.place.entity.apiresp.*;
import com.quanyan.place.entity.vo.*;
import com.quanyan.place.response.PlaceBaseResponse;
import com.quanyan.place.response.PlaceSearchResponse;
import com.quanyan.platform.response.MyPlaceResponse;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2016/4/14 0014.
 */
public interface PlaceClient<T> {


    APIResponse<T> getProvinceData();

    APIResponse<T> getCityData(Integer provinceId,boolean isEnabled);

    APIResponse<T> getCategory();


    APIResponse<T> selectPlaceByName(String placeName);

    APIResponse<T> getPlaceUnitList(Integer placeId);


    //String getCommonDataCache(String key);

    /**
     * 获取用户收藏场馆列表
     * @param uid
     * @param pageNum
     * @param pageSize
     * @return
     */
//    APIResponse<PageObj<List<RespBizPlaceBaseInfo>>> getUserCoolectPlaceInfos(Integer uid, Integer pageNum, Integer pageSize);

    /**
     * 删除redis中用户收藏的场馆
     * @param uid
     * @param placeIds
     */
    void delUserPlaceCache(Integer uid, List<Integer> placeIds);

    /**
     * 根据场馆id集合获取场馆的基本对象集合
     * @param placeIds
     * @return 返回方式map<Integer,PlaceDubboProvider>
     */
    Map<Integer,PlaceDubboProvider> getPlaceListByPlaceId(List<Integer> placeIds);

	/**
     *根据场馆id集合获取场馆的基本对象集合(包含距离)
     * @param placeIds
     * @param lat
     * @param lng
     * @return
     */
    Map<Integer,PlaceDubboProvider> getPlaceByTerm(List placeIds, Double lat, Double lng);

    /**
     * 根据id获取场馆（单个）
     * @param placeId
     * @return
     */
    Map<Integer, PlaceDubboProvider> getPlaceBySinglePlaceId(Integer placeId);

    /**
     * 根据场馆id获取场馆下可用场地对象的集合
     * @param placeId
     * @return 返回方式list<PlaceUnitDubboProvider>
     */
    List<PlaceUnitDubboProvider> getPlaceUnitListByPlaceId(Integer placeId);

    /**
     * 场地id集合获取场地的基本对象集合
     * @param placeUnitIds
     * @return 返回方式 map<integer,PlaceUnitDubboProvider>
     */
    Map<Integer,PlaceUnitDubboProvider> getPlaceUnitListByPlaceUnitId(List<Integer> placeUnitIds);

    /**
     * 某区域下区域id或者城市id，获取场馆集合列表
     * 备注：返回已签约场馆
     * @param cityId
     * @param districtId
     * @return list<PlaceDubboProvider>
     */
    List<PlaceDubboProvider> getPlaceListByCityIdOrDistrictId(Integer cityId, Integer districtId);


    /**
     * 某区域下区域id或者城市id,栏目id，获取场馆集合列表
     * @param cityId
     * @param districtId
     * @param categoryId
     * @return
     */
    List<PlaceDubboProvider> getPlaceListByCityIdOrDistrictId(Integer cityId, Integer districtId,Integer categoryId);

    /**
     * 根据cityId获取District对象列表
     * @param cityId
     * @return
     */
    List<RespDistrictVo> getDistrictByCityId(int cityId);

    /**
     *
     * 根据城市id获取城市对象
     * @param cityId
     * @return
     */
    RespCity getRespCityById(Integer cityId);

    /**
     * 获取系统城市区域
     * @return
     */
    List<RespCityInfos> getSysCityInfos();

    /**
     * 更新订单可用状态
     * @param uid
     * @param placeOrderId
     * @param type
     * @return
     */
    APIResponse<?> isOrderUse(Integer uid, String placeOrderId, Integer type);

    /**
     * 获取用户订场小时数
     * @param uid
     * @param startDate
     * @param endDate
     * @return
     */
    Double getUserPlaceHours(Integer uid,Date startDate,Date endDate);


    /**
     * huoqu区
     * @param lat
     * @param lng
     * @return
     */
    RespDistrict getRespDistrict(double lat, double lng);

    /**
     * 根据场馆id集合获取场馆的位置
     * @param placeIds
     * @return
     */
    List<RespPlaceLocation> getPlaceLocation(List placeIds);

    boolean isAnyOrder(Integer uid);

    Integer getMemberCardNum(Integer uid);


    /**
     * 根据placeId查询场馆基本信息
     * @param placeId
     * @return
     */
    PlaceBaseResponse getPlaceById(Integer placeId);

	/**
     * 获取用户订单的场馆信息
     * @param uid
     * @return
     */
    APIResponse<List<Integer>> findOrdersByUid(Integer uid);

	/**
     * 获取用户24小时开始的订单场馆信息
     * @param uid
     * @return
     */
    APIResponse<MyPlaceResponse> findEarlyPlace(Integer uid);

    APIResponse<PlaceSearchResponse> findPlaceByLat(Double lat, Double lng);

}
